package com.ambitious.service;

import com.ambitious.domain.Grade;
import com.ambitious.domain.NormalCourse;
import com.ambitious.domain.WeekCourse;
import com.ambitious.domain.academic.Academic;
import com.ambitious.domain.academic.BasicCourse;
import com.ambitious.domain.academic.CourseInfo;
import com.ambitious.domain.token.EduToken;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

/**
 * 教务系统相关业务逻辑
 * @author Ambitious
 */
public interface EducationService {

    /**
     * 将课程列表进行整理，细分出周课表
     * @param courses 所有课程列表
     * @param totalWeek 总周数
     * @return 周课列表
     */
    List<WeekCourse> getWeekCourses(List<NormalCourse> courses, int totalWeek);

    /**
     * 计算每个课程分类的最低学分
     * @param academic 学业信息对象
     * @param value 要处理的html（值存在html中）
     */
    void setLimitCredit(Academic academic, String value);

    /**
     * 获取一个学业情况数据的POST请求
     * @param eduToken 教务系统token
     * @param url 请求地址
     * @param value 请求参数 xfyqjd_id
     * @return post请求对象
     */
    HttpPost initAcademicPost(EduToken eduToken, String url, String value) throws UnsupportedEncodingException;

    /**
     * 将查询到的课程列表设置到学业课程信息对象中
     * @param courseInfo 某个类别的课程信息
     * @param courses 课程列表
     */
    void setCourseInfo(CourseInfo courseInfo, List<BasicCourse> courses);
}
